Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

C/C++本地代码调试

帖子发起人: 烈火   发起时间: 2013-02-19 22:09 下午   回复: 4

Print Search
帖子排序:    
   2013-02-19, 22:09 下午
FireBurn 离线,最后访问时间: 2014/2/10 8:02:11 烈火

发帖数前50位
注册: 2013-01-26
发 贴: 28
请教,为什么类的成员变量在PDB中看不到
Reply Quote
使用VC6.0,编译选项/Zi,链接选项/pdbtype:con。全局变量和类的成员函数在PDB文件中都可以找到,唯独没有成员变量,这是为什么?

另外请教一下转储文件的问题。有一个网络程序在客户的服务器上会不定时的崩溃,我准备使用ADPlus -Crash模式来自动产生转储文件。不过这是第一次在实际环境中建立转储文件,请教一下这种做法有没有什么需要注意的地方。

IP 地址: 已记录   报告
   2013-02-20, 14:53 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教,为什么类的成员变量在PDB中看不到
Reply Quote

使用的哪个命令,x还是dt?对于类的成员,应该用后者,dt mymodule!myclass

 

 


IP 地址: 已记录   报告
   2013-02-20, 15:48 下午
FireBurn 离线,最后访问时间: 2014/2/10 8:02:11 烈火

发帖数前50位
注册: 2013-01-26
发 贴: 28
Re: 请教,为什么类的成员变量在PDB中看不到
Reply Quote
先是使用SymView查看的,后来用x查看。
不过我突然觉得自己犯了个错误,我本意是要查看某个类的“非静态成员变量”。在对象没有实例化之前,PDB文件中当然不可能存在它的符号信息吧。

IP 地址: 已记录   报告
   2013-02-21, 06:31 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教,为什么类的成员变量在PDB中看不到
Reply Quote

类型信息总是有的,用dt查看就可以了,比如:

0:000>dt BadBoy!CBadBoyDlg
   +0x000 __VFN_table : Ptr32
   =003b0000 classCObject     : CRuntimeClass
   =003b0000 classCCmdTarget  : CRuntimeClass
   =003b0000 _commandEntries  : [0] AFX_OLECMDMAP_ENTRY
   =003b0000 commandMap       : AFX_OLECMDMAP
   =003b0000 _dispatchEntries : [0] AFX_DISPMAP_ENTRY
   =003b0000 _dispatchEntryCount : Uint4B
   =003b0000 _dwStockPropMask : Uint4B
   =003b0000 dispatchMap      : AFX_DISPMAP
   =003b0000 _connectionEntries : [0] AFX_CONNECTIONMAP_ENTRY
   =003b0000 connectionMap    : AFX_CONNECTIONMAP
   =003b0000 _interfaceEntries : [0] AFX_INTERFACEMAP_ENTRY
   =003b0000 interfaceMap     : AFX_INTERFACEMAP
   =003b0000 _eventsinkEntries : [0] AFX_EVENTSINKMAP_ENTRY
   =003b0000 _eventsinkEntryCount : Uint4B
   =003b0000 eventsinkMap     : AFX_EVENTSINKMAP
   +0x004 m_dwRef          : Int4B
   +0x008 m_pOuterUnknown  : Ptr32 IUnknown
   +0x00c m_xInnerUnknown  : Uint4B
   +0x010 m_xDispatch      : CCmdTarget::XDispatch
   +0x014 m_bResultExpected : Int4B
   +0x018 m_xConnPtContainer : CCmdTarget::XConnPtContainer
   +0x01c m_pModuleState   : Ptr32 AFX_MODULE_STATE
   =003b0000 classCWnd        : CRuntimeClass
   +0x020 m_hWnd           : Ptr32 HWND__
   =003b0000 wndTop           : CWnd
   =003b0000 wndBottom        : CWnd
   =003b0000 wndTopMost       : CWnd
   =003b0000 wndNoTopMost     : CWnd
   +0x024 m_bEnableActiveAccessibility : Bool
   +0x028 m_pStdObject     : Ptr32 IAccessible
   +0x02c m_pProxy         : Ptr32 IAccessibleProxy
   =003b0000 _interfaceEntries : [0] AFX_INTERFACEMAP_ENTRY
   =003b0000 interfaceMap     : AFX_INTERFACEMAP
   +0x030 m_xAccessible    : CWnd::XAccessible
   +0x034 m_xAccessibleServer : CWnd::XAccessibleServer
   +0x038 m_bIsTouchWindowRegistered : Int4B
   +0x03c m_ptGestureFrom  : CPoint
   +0x044 m_ulGestureArg   : Uint8B
   +0x04c m_bGestureInited : Int4B
   +0x050 m_pCurrentGestureInfo : Ptr32 tagGESTUREINFO
   +0x054 m_hWndOwner      : Ptr32 HWND__
   +0x058 m_nFlags         : Uint4B
   +0x05c m_pfnSuper       : Ptr32     long
   =003b0000 m_nMsgDragList   : Uint4B
   +0x060 m_nModalResult   : Int4B
   +0x064 m_pDropTarget    : Ptr32 COleDropTarget
   +0x068 m_pCtrlCont      : Ptr32 COleControlContainer
   +0x06c m_pCtrlSite      : Ptr32 COleControlSite
   +0x070 m_pMFCCtrlContainer : Ptr32 CMFCControlContainer
   =003b0000 classCDialog     : CRuntimeClass
   +0x074 m_nIDHelp        : Uint4B
   +0x078 m_lpszTemplateName : Ptr32 Char
   +0x07c m_hDialogTemplate : Ptr32 Void
   +0x080 m_lpDialogTemplate : Ptr32 DLGTEMPLATE
   +0x084 m_lpDialogInit   : Ptr32 Void
   +0x088 m_pParentWnd     : Ptr32 CWnd
   +0x08c m_hWndTop        : Ptr32 HWND__
   +0x090 m_pOccDialogInfo : Ptr32 _AFX_OCC_DIALOG_INFO
   +0x094 m_InfoList       : CListBox
   +0x108 m_dwMemBytes     : Uint4B
   +0x10c m_hIcon          : Ptr32 HICON__
   +0x110 m_ulCount        : Uint4B

如果知道对象地址,那么可以这样观察到每个成员的取值:

0:000>dt BadBoy!CBadBoyDlg 0x77c50da8
   +0x000 __VFN_table : 0x00087d83
   =003b0000 classCObject     : CRuntimeClass
   =003b0000 classCCmdTarget  : CRuntimeClass
   =003b0000 _commandEntries  : [0] AFX_OLECMDMAP_ENTRY
   =003b0000 commandMap       : AFX_OLECMDMAP
   =003b0000 _dispatchEntries : [0] AFX_DISPMAP_ENTRY
   =003b0000 _dispatchEntryCount : 0x905a4d
   =003b0000 _dwStockPropMask : 0x905a4d
   =003b0000 dispatchMap      : AFX_DISPMAP
   =003b0000 _connectionEntries : [0] AFX_CONNECTIONMAP_ENTRY
   =003b0000 connectionMap    : AFX_CONNECTIONMAP
   =003b0000 _interfaceEntries : [0] AFX_INTERFACEMAP_ENTRY
   =003b0000 interfaceMap     : AFX_INTERFACEMAP
   =003b0000 _eventsinkEntries : [0] AFX_EVENTSINKMAP_ENTRY
   =003b0000 _eventsinkEntryCount : 0x905a4d
   =003b0000 eventsinkMap     : AFX_EVENTSINKMAP
   +0x004 m_dwRef          : -35125899
   +0x008 m_pOuterUnknown  : 0x33000899 IUnknown
   +0x00c m_xInnerUnknown  : 0x8be175c9
   +0x010 m_xDispatch      : CCmdTarget::XDispatch
   +0x014 m_bResultExpected : -62535688
   +0x018 m_xConnPtContainer : CCmdTarget::XConnPtContainer
   +0x01c m_pModuleState   : 0x00207d83 AFX_MODULE_STATE
   =003b0000 classCWnd        : CRuntimeClass
   +0x020 m_hWnd           : 0x458b1b74 HWND__
   =003b0000 wndTop           : CWnd
   =003b0000 wndBottom        : CWnd
   =003b0000 wndTopMost       : CWnd
   =003b0000 wndNoTopMost     : CWnd
   +0x024 m_bEnableActiveAccessibility : 20
   +0x028 m_pStdObject     : 0x558b0889 IAccessible
   +0x02c m_pProxy         : 0xf8458b20 IAccessibleProxy
   =003b0000 _interfaceEntries : [0] AFX_INTERFACEMAP_ENTRY
   =003b0000 interfaceMap     : AFX_INTERFACEMAP
   +0x030 m_xAccessible    : CWnd::XAccessible
   +0x034 m_xAccessibleServer : CWnd::XAccessibleServer
   +0x038 m_bIsTouchWindowRegistered : 293097
   +0x03c m_ptGestureFrom  : CPoint
   +0x044 m_ulGestureArg   : 0xc4558939`ea83c455
   +0x04c m_bGestureInited : 197426563
   +0x050 m_pCurrentGestureInfo : 0x458b0a77 tagGESTUREINFO
   +0x054 m_hWndOwner      : 0x8524ffc4 HWND__
   +0x058 m_nFlags         : 0x77c51264
   +0x05c m_pfnSuper       : 0x1175c933     long  +1175c933
   =003b0000 m_nMsgDragList   : 0x905a4d
   +0x060 m_nModalResult   : 812140906
   +0x064 m_pDropTarget    : 0xe877984b COleDropTarget
   +0x068 m_pCtrlCont      : 0xffd6fb3c COleControlContainer
   +0x06c m_pCtrlSite      : 0x0174c085 COleControlSite
   +0x070 m_pMFCCtrlContainer : 0xe9c033cc CMFCControlContainer
   =003b0000 classCDialog     : CRuntimeClass
   +0x074 m_nIDHelp        : 0x43d
   +0x078 m_lpszTemplateName : 0x000435e9  "--- memory read error at address 0x000435e9 ---"
   +0x07c m_hDialogTemplate : 0x187d8300
   +0x080 m_lpDialogTemplate : 0x6a117400 DLGTEMPLATE
   +0x084 m_lpDialogInit   : 0x4b306850
   +0x088 m_pParentWnd     : 0x19e87798 CWnd
   +0x08c m_hWndTop        : 0x85ffd6fb HWND__
   +0x090 m_pOccDialogInfo : 0xcc0174c0 _AFX_OCC_DIALOG_INFO
   +0x094 m_InfoList       : CListBox
   +0x108 m_dwMemBytes     : 0x89f855ff
   +0x10c m_hIcon          : 0x9fe9fc45 HICON__
   +0x110 m_ulCount        : 0x8b000003


IP 地址: 已记录   报告
   2013-02-21, 16:48 下午
FireBurn 离线,最后访问时间: 2014/2/10 8:02:11 烈火

发帖数前50位
注册: 2013-01-26
发 贴: 28
Re: 请教,为什么类的成员变量在PDB中看不到
Reply Quote
感谢张老师指导,在WinDbg的帮助文档里面也找到了,看文档的时候还不能马虎啊。
IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » 请教,为什么类的成员变量在PDB中看不到

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.